package com.offcn.seckill.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.offcn.common.entity.PageResult;
import com.offcn.seckill.entity.SeckillStatus;
import com.offcn.seckill.pojo.SeckillOrder;

import java.util.List;


/**
 * 秒杀订单业务层接口
 *
 * @author 秋林
 * @date 2022/10/18 16:54:17
 */
public interface SeckillOrderService extends IService<SeckillOrder> {

    /**
     * SeckillOrder多条件分页查询
     *
     * @param seckillOrder 秒杀订单
     * @param page         当前页
     * @param size         每页显示条数
     * @return {@link PageResult}<{@link SeckillOrder}>
     */
    PageResult<SeckillOrder> findPage(SeckillOrder seckillOrder, int page, int size);

    /**
     * SeckillOrder分页查询
     *
     * @param page 当前页
     * @param size 每页显示条数
     * @return {@link PageResult}<{@link SeckillOrder}>
     */
    PageResult<SeckillOrder> findPage(int page, int size);

    /**
     * SeckillOrder多条件搜索方法
     *
     * @param seckillOrder 秒杀订单
     * @return {@link List}<{@link SeckillOrder}>
     */
    List<SeckillOrder> findList(SeckillOrder seckillOrder);

    /**
     * 删除SeckillOrder
     *
     * @param id id
     */
    void delete(Long id);

    /**
     * 修改SeckillOrder数据
     *
     * @param seckillOrder 秒杀订单
     */
    void update(SeckillOrder seckillOrder);

    /**
     * 新增SeckillOrder
     *
     * @param seckillOrder 秒杀订单
     */
    void add(SeckillOrder seckillOrder);

    /**
     * 根据ID查询SeckillOrder
     *
     * @param id id
     * @return {@link SeckillOrder}
     */
    SeckillOrder findById(Long id);

    /**
     * 查询所有SeckillOrder
     *
     * @return {@link List}<{@link SeckillOrder}>
     */
    List<SeckillOrder> findAll();

    /**
     * 添加秒杀订单
     *
     * @param id       商品ID
     * @param time     商品秒杀开始时间
     * @param username 用户登录名
     * @return boolean
     */
    boolean add(Long id,String time,String username);

    /**
     *  抢单状态查询
     *
     * @param username 用户名
     * @return {@link SeckillStatus}
     */
    SeckillStatus queryStatus(String username);

    /**
     * 更新订单状态
     *
     * @param out_trade_no   贸易没有
     * @param transaction_id 事务id
     * @param username       用户名
     */
    void updatePayStatus(String out_trade_no,String transaction_id,String username);


    /**
     * 关闭订单，回滚库存
     *
     * @param username 名字
     */
    void  closeOrder(String username);
}
